import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
// 写法一
  // to.path是要跳转的路径
  const url = to.path
  const token = store.getters.token
  const whiteList = ['/login', '/404', '/test']
  // 1、有登陆
  // 1-1去登录页=>跳首页
  if (token && url === '/login') {
    next('/')
  }
  // 1-2 有登陆不去登录页=>放行
  if (token && url !== '/login') {
    // 登录后的正常页面进入之前,确保获取用户数据
    // 判断profile有没有数据
    if (Object.keys(store.state.user.profile).length === 0) {
      // 不用每次跳转都拿, 如果已经有过数据就不用拿了
      // {} 永远为 true, 需要判断里面的属性值
      // Object.keys(obj)可以获得属性值组成数组
      await store.dispatch('user/getprofile')
      // 这里拿完数据以后, 当前用户的 menus 就存在
      // 可以进行路由筛选(必须是next之前)
      const menus = store.state.user.profile.roles.menus
      const res = await store.dispatch('permission/filterRoutes', menus)
      console.log('导航守卫获取的信息', res)
      router.addRoutes([
        ...res,
        { path: '*', redirect: '/404', hidden: true }
      ])
      return next(to.path)
    }
    next()
  }

  // 2、没登录
  // 2-1 在白名单=>放行
  // -1是不存在，！取反是存在的时候
  if (!token && whiteList.indexOf(url) !== -1) {
    next()
  }
  // 2-2 不在白名单=>跳登录页
  if (!token && whiteList.indexOf(url) === -1) {
    next('/login')
  }

  // 写法二
  // // 是否登录
  // if (store.getters.token) {
  //   // 已登录
  //   // 是否去登录页面
  //   if (to.path === '/login') {
  //     next('/')
  //   } else {
  //     // 放行
  //     next()
  //   }
  // } else {
  //   //   未登录
  //   //   判断是否允许非登录用户访问白名单中
  //   const whiteList = ['/login', '/404', '/test']
  //   if (whiteList.indexOf(to.path) !== -1) {
  //     //   在白名单中随便进，放行
  //     next()
  //   } else {
  //     // 不在白名单，跳登录页
  //     next('/login')
  //   }
  // }
})
